#ifndef TREE_H
#define TREE_H

#include "bga/system/Node.h"
#include "bga/system/DepthFirstTreeIterator.h"

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{

/*!
 * \class Tree
 * \brief this class represents a tree
 *
 *
 */
template< typename T >
class Tree
{
	public:
		Tree();
		~Tree();

		Node<T>& getRoot();

        void setRoot(Node<T>& root);

		DepthFirstTreeIterator<T> getDepthFirstIterator() const;

		void addNodeListener(const NodeListener& nodeListener);

	protected:

	private:

        Node<T> root;

};

}

#include "bga/system/Tree.inl"

#endif // TREE_H

